package com.alan.base.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.FrameLayout;

import com.alan.base.utils.Logger;

public class BaseAutoDismissLayout extends FrameLayout {


    protected String TAG = getClass().getSimpleName();
    protected AutoDismissHandler autoDismissHandler;
    protected long timeAfter = 3 * 1000;
    protected OnAutoDismissListener onAutoDismissListener;

    public BaseAutoDismissLayout(Context context) {
        super(context);
    }

    public BaseAutoDismissLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    protected void startAutoDismiss(long time) {
        this.timeAfter = time;
        Logger.d(TAG, "startAutoDismiss:" + time);
        autoDismissHandler = new AutoDismissHandler(timeAfter, () -> {
            Logger.d(TAG, "AutoDismissHandler run onAutoDismissListener is null:" + (onAutoDismissListener == null));
            if (null != onAutoDismissListener) {
                onAutoDismissListener.onAutoDismissListener();
            } else {
                callOnClick();
            }
        });
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        autoDismissHandler.release();
    }

    public void setOnAutoDismissListener(OnAutoDismissListener onAutoDismissListener) {
        this.onAutoDismissListener = onAutoDismissListener;
    }

    public interface OnAutoDismissListener {
        void onAutoDismissListener();
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        Logger.d(TAG, "dispatchTouchEvent");
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                autoDismissHandler.pause();
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                autoDismissHandler.start();
                break;
        }
        return super.dispatchTouchEvent(ev);
    }
}
